﻿#include "FCQuadcopterDynamicsNode.h"
#include <QObject>
#include "StandardInputOutputNodeGraphicsItem.h"
FCQuadcopterDynamicsNode::FCQuadcopterDynamicsNode() : StandardInputOutputNode()
{
    // 设置一个唯一的Prototype
    metaData().setNodePrototype("DA.QuadcopterDynamicsNode");
    // 这个图标影响侧边栏的效果
    metaData().setIcon(QIcon(":/logic-designer/icon/resource/uav.svg"));
    // 分组名称
    metaData().setGroup(QObject::tr("Simulation"));
    // 节点的名字，这个名字显示在左侧边的节点栏
    metaData().setNodeName(QObject::tr("Quadcopter Dynamics"));
    // 显示名称，这是显示到画布上的名字
    setDisplayName(QObject::tr("Quadcopter Dynamics"));
    addInputKey(u8"inPWMs");
    addOutputKey(u8"PosE");
    addOutputKey(u8"VelE");
    addOutputKey(u8"AngEuler");
    addOutputKey(u8"AngRateB");
    addOutputKey(u8"MotorRPMS");
    addOutputKey(u8"GPS");
}

/**
 * @brief rtti,用于快速实现节点的识别
 *
 * rtti,用于快速实现节点的识别，而不需要不停的dynamic_cast,需要在BaseNode中定义rtti值，
 * 也可以自己定义好不冲突的rtti，此值暂时无用，未来节点多了之后rtti值可以快速筛选出需要的节点
 * @sa BaseNode::RTTIValue
 * @return
 */
int FCQuadcopterDynamicsNode::rtti() const
{
    return RTTI_QuadcopterDynamics;
}

/**
 * @brief 生成图元
 *
 * StandardInputOutputNodeGraphicsItem是标准的输入输出节点，右边为节点输入，左边为节点输出
 * @return
 */
DA::DAAbstractNodeGraphicsItem* FCQuadcopterDynamicsNode::createGraphicsItem()
{
    auto i = new StandardInputOutputNodeGraphicsItem(this);
    return i;
}

/**
 * @brief 执行节点，执行动作在这里实现
 *
 * 执行的结果通过
 * @return
 */
bool FCQuadcopterDynamicsNode::exec()
{
    return true;
}
